package com.nowcoder.Offer.Tree;

import org.junit.Test;

import java.util.*;

/**
 * 把二叉树打印成多行
 */
public class PrintTree {

    ArrayList<ArrayList<Integer>> ans = new ArrayList<>();

    ArrayList<ArrayList<Integer>> Print(TreeNode root) {
        if(root == null) return  ans;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);

        boolean flag = false;

        while(!queue.isEmpty()){
            ArrayList<Integer> curList = new ArrayList<>();
            for(int i=queue.size(); i>0;i--){
                TreeNode curNode = queue.poll();
                curList.add(curNode.val);
                if(curNode.left!=null) queue.add(curNode.left);
                if(curNode.right!=null) queue.add(curNode.right);

            }
            if(flag){
                Collections.reverse(curList);
            }
            flag = !flag;
            ans.add(curList);
        }
        return ans;
    }

    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        if(root == null) return  new ArrayList<>();
        ArrayList<Integer> ans = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            TreeNode node = queue.poll();
            ans.add(node.val);
            if(node.left!=null) queue.offer(node.left);
            if(node.right!=null) queue.offer(node.right);
        }
        return ans;
    }



    @Test
    public void test(){
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);

        node1.left = node2; node1.right = node3;
        node2.left = node4; node2.right = node5;
        node3.left = node6; node3.right = node7;

        Print(node1).forEach(System.out::println);
    }
}
